import apiClient from '@/lib/interceptor';
import axios from 'axios';

//路径为@/lib/user.ts
// 登录请求
export const login = (employeeId: string, password: string) => {
  // 创建表单数据
  const formData = new URLSearchParams();
  formData.append('employeeId', String(employeeId));
  formData.append('password', password);
  
  console.log('【登录请求】简化版 - 发送数据:', formData.toString());
  
  // 添加随机查询参数避免缓存
  const timestamp = new Date().getTime();
  
  // 简化URL构建，使用相对路径，依赖Nginx反向代理
  const url = `/api/login?_t=${timestamp}`;
  console.log('【登录请求】使用相对URL:', url);
  
  // 创建一个完全独立的axios实例，避免使用全局配置
  const axiosInstance = axios.create();
  
  // 重要：登录请求完全避免使用token
  return axiosInstance.post(url, formData, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      // 添加跨域支持头
      'X-Requested-With': 'XMLHttpRequest',
      'Accept': 'application/json'
      // 重要：不要包含任何token相关头，防止后端拦截器尝试验证
    },
    // 不包含凭证，避免cookie中的token被发送
    withCredentials: false,
    // 添加额外的配置，确保我们可以获取完整的响应信息
    validateStatus: function (status) {
      // 允许任何状态码，包括401，这样我们可以在catch中处理
      return true;
    },
    transformResponse: [
      // 保留原始响应
      function (data) {
        try {
          // 尝试解析JSON
          return JSON.parse(data);
        } catch (e) {
          // 如果不是JSON，返回原始数据
          return data;
        }
      }
    ],
    // 确保接收所有响应头
    maxRedirects: 0,
    // 设置超时
    timeout: 10000
  });
};

// 备用的Fetch API登录函数
export const backupLogin = async (employeeId: string, password: string) => {
  // 创建表单数据
  const formData = new URLSearchParams();
  formData.append('employeeId', String(employeeId));
  formData.append('password', password);
  
  console.log('【备用登录】使用Fetch API - 发送数据:', formData.toString());
  
  // 添加随机查询参数避免缓存
  const timestamp = new Date().getTime();
  
  // 使用相对URL，确保正确访问API
  const url = `/api/login?_t=${timestamp}`;
  console.log('【备用登录】使用URL:', url);
  
  try {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'X-Requested-With': 'XMLHttpRequest',
        'Accept': 'application/json'
      },
      body: formData.toString(),
      // 不发送凭证
      credentials: 'omit'
    });
    
    console.log('【备用登录】响应状态:', response.status, response.statusText);
    
    // 尝试解析响应
    let data;
    const contentType = response.headers.get('content-type');
    if (contentType && contentType.includes('application/json')) {
      data = await response.json();
    } else {
      data = await response.text();
    }
    
    console.log('【备用登录】响应数据:', data);
    
    return {
      status: response.status,
      statusText: response.statusText,
      data: data,
      headers: Object.fromEntries(response.headers.entries())
    };
  } catch (error) {
    console.error('【备用登录】Fetch错误:', error);
    throw error;
  }
};

// 用户获取自己信息
export const getUserInfo = () => {
  return apiClient.get('/getEmpInfo/personal');
};

// 用户修改自己信息
export const updateUserInfo = (userInfo: {
  gender: string;
  age: number;
  birthday?: string;
  phoneNumber: string;
  email: string;
}) => {
  return apiClient.patch('/updateInfo', userInfo);
};

// 用户修改密码
export const changePassword = (oldPassword: string, newPassword: string) => {
  return apiClient.patch('/updatepwd', { oldPassword, newPassword });
};

// 定义管理员修改员工信息的接口类型
interface UpdateEmployeeData {
  employeeId: string;
  department?: number | null;
  position?: number | null;
  deptType?: number | null;
  roleId?: number | null;
  status: number;
}

// 管理员修改员工信息
export const updateEmployeeProfile = (data: UpdateEmployeeData) => {
  // 验证部门相关字段的逻辑
  if (data.department !== undefined && data.department !== null) {
    // 如果修改部门，则必须包含职位和部门类型
    if (data.position === undefined || data.deptType === undefined) {
      throw new Error('修改部门时必须同时提供职位和部门类型');
    }
  }

  // 如果只修改职位，不需要传部门和部门类型
  if (data.position !== undefined && data.department === undefined) {
    delete data.deptType;
  }

  return apiClient.patch('/updateProfile', data);
};

// 管理员重置员工密码
export const resetEmployeePassword = (employeeId: string, newPassword: string) => {
  return apiClient.patch('/resetpwd', { employeeId, newPassword });
};

// 获取所有员工信息
export const fetchEmployeeData = (params: any) => {
  return apiClient.get('/getEmpInfo', { params });
};

// 查询单个员工信息
export const fetchSingleEmployee = (employeeId: string) => {
  return apiClient.get('/getEmpInfo', { 
    params: { employeeId } 
  });
};

// 批量删除员工
export const deleteEmployees = (employeeIds: string[]) => {
  const ids = employeeIds.join(',');
  return apiClient.delete(`/deleteEmployees/${ids}`);
};

// 定义添加员工的接口类型
interface AddEmployeeData {
  employeeId: string;
  username: string;
  gender: number;
  age: number | null;
  birthday: string | null;
  phoneNumber: string | null;
  email: string | null;
  department: number;
  position: number;
  roleId: number;
  deptType: number;
}

// 添加新员工
export const addEmployee = (employeeData: AddEmployeeData) => {
  return apiClient.post('/addEmployee', employeeData);
};